package com.firefly.admin.system.service;


import com.firefly.admin.common.vo.Result;
import com.firefly.admin.system.entity.FySystemOrganization;
import com.firefly.admin.system.vo.GroupSelect;
import com.firefly.admin.system.vo.OrgTree;
import com.firefly.admin.system.vo.SystemOrgQueryVo;
import com.firefly.admin.system.vo.SystemOrgStatusUpdateVo;

import java.util.List;

public interface FySystemOrganizationService {

    /**
     * 查询系统组织机构列表接口
     *
     * @param systemOrgQueryVo 查询参数
     * @return 列表
     */
    Result<List<FySystemOrganization>> getSystemOrgList(SystemOrgQueryVo systemOrgQueryVo);

    /**
     * 系统组织机构信息新增接口
     *
     * @param fySystemOrganization 组织机构信息
     * @return 操作结果
     */
    Result<FySystemOrganization> add(FySystemOrganization fySystemOrganization);

    /**
     * 系统组织机构信息编辑接口
     *
     * @param fySystemOrganization 组织机构信息
     * @return 操作结果
     */
    Result<FySystemOrganization> update(FySystemOrganization fySystemOrganization);

    /**
     * 系统组织机构状态编辑接口
     *
     * @param systemOrgStatusUpdateVo 状态信息
     * @return 操作结果
     */
    Result<FySystemOrganization> updateStatus(SystemOrgStatusUpdateVo systemOrgStatusUpdateVo);

    /**
     * 系统组织机构信息删除接口
     *
     * @param orgId 组织机构ID
     * @return 操作结果
     */
    Result<String> delete(Long orgId);

    /**
     * 通过组织机构ID获取组织机构信息
     *
     * @param orgId 组织机构ID
     * @return 组织机构信息
     */
    FySystemOrganization findById(Long orgId);

    /**
     * 通过组织机构ID获取所有子组织ID
     *
     * @param orgId 组织机构ID
     * @return 自组织机构ID列表
     */
    List<Long> findChildrenOrgList(Long orgId);

    /**
     * 获取组织机构树列表接口
     *
     * @return 组织机构树列表
     */
    Result<List<OrgTree>> getOrgTree();

    /**
     * 通过父节点ID获取能作选负责人的账号信息
     *
     * @param parentId 父节点ID
     * @return 可选负责人账号列表
     */
    Result<List<GroupSelect>> getDirectorList(Long parentId);

    /**
     * 查询所有正常状态组织机构
     *
     * @return 组织机构列表
     */
    List<FySystemOrganization> getAllUsableOrg();
}
